package com.wang.architecture.a_original;

import com.wang.architecture.a_original.dao.DemoDao;

/**
 * @author wangchao05
 */
public class BeanFactory {
//    public static DemoDao getDemoDao() {
//        //因为 BeanFactory 只要缺少了 DemoDaoImpl 这个类，那么BeanFactory 就会报错
////        可以描述为 BeanFactory 强依赖于 DemoDaoImpl ，这个也就是紧耦合
////        return new DemoDaoImpl(); // DemoDaoImpl.java不存在导致编译失败
//        return new DemoOracleDao();
//    }


    /**
     * 为了 避免 上面 getDemoDao 的强耦合情况 我们用反射的方法来做
     * @return
     */
    public static DemoDao getDemoDaoWithReflection() {

        try {
            return (DemoDao) Class.forName("com.wang.architecture.a_original.dao.impl.DemoDaoImpl").newInstance();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("DemoDao instantiation error, cause: " + e.getMessage());
        }

    }
}
